608060405266b1a2bc2ec50000600c556115b3600d556014600e556032600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040516200564c3803806200564c833981810160405281019062000088919062000431565b6040518060400160405280601481526020017f4b4f534d4f20436f6c6c6563746f7220506173730000000000000000000000008152506040518060400160405280600381526020017f4b4350000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010c92919062000303565b5080600190805190602001906200012592919062000303565b505050620001486200013c6200016060201b60201c565b6200016860201b60201c565b62000159816200022e60201b60201c565b5062000689565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023e6200016060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000264620002d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b490620004a9565b60405180910390fd5b80600b9080519060200190620002d592919062000303565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003119062000571565b90600052602060002090601f01602090048101928262000335576000855562000381565b82601f106200035057805160ff191683800117855562000381565b8280016001018555821562000381579182015b828111156200038057825182559160200191906001019062000363565b5b50905062000390919062000394565b5090565b5b80821115620003af57600081600090555060010162000395565b5090565b6000620003ca620003c484620004f4565b620004cb565b905082815260208101848484011115620003e957620003e862000640565b5b620003f68482856200053b565b509392505050565b600082601f8301126200041657620004156200063b565b5b815162000428848260208601620003b3565b91505092915050565b6000602082840312156200044a57620004496200064a565b5b600082015167ffffffffffffffff8111156200046b576200046a62000645565b5b6200047984828501620003fe565b91505092915050565b6000620004916020836200052a565b91506200049e8262000660565b602082019050919050565b60006020820190508181036000830152620004c48162000482565b9050919050565b6000620004d7620004ea565b9050620004e58282620005a7565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051257620005116200060c565b5b6200051d826200064f565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200055b5780820151818401526020810190506200053e565b838111156200056b576000848401525b50505050565b600060028204905060018216806200058a57607f821691505b60208210811415620005a157620005a0620005dd565b5b50919050565b620005b2826200064f565b810181811067ffffffffffffffff82111715620005d457620005d36200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614fb380620006996000396000f3fe6080604052600436106102465760003560e01c80635c975abb11610139578063a0712d68116100b6578063c87b56dd1161007a578063c87b56dd14610872578063d0eb26b0146108af578063d5abeb01146108d8578063e985e9c514610903578063edec5f2714610940578063f2fde38b1461096957610246565b8063a0712d681461079c578063a22cb465146107b8578063b88d4fde146107e1578063ba4e5c491461080a578063ba7d2c761461084757610246565b80637f00c7a6116100fd5780637f00c7a6146106c95780638da5cb5b146106f25780638eb563961461071d57806395d89b41146107465780639c70b5121461077157610246565b80635c975abb146105e25780636352211e1461060d5780636c0360eb1461064a57806370a0823114610675578063715018a6146106b257610246565b806328fb1eff116101c757806342842e0e1161018b57806342842e0e146104ed578063438b63001461051657806344a0d68a146105535780634f6ccce71461057c57806355f804b3146105b957610246565b806328fb1eff146104295780632f745c59146104405780633af32abf1461047d5780633c952764146104ba5780633ccfd60b146104e357610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806318cae26914610398578063239c70ae146103d557806323b872dd1461040057610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906138d5565b610992565b60405161027f9190613f90565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906138a8565b610a0c565b005b3480156102bd57600080fd5b506102c6610aa5565b6040516102d39190613fab565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613978565b610b37565b6040516103109190613f07565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906137db565b610bbc565b005b34801561034e57600080fd5b50610357610cd4565b604051610364919061432d565b60405180910390f35b34801561037957600080fd5b50610382610cda565b60405161038f919061432d565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613658565b610ce7565b6040516103cc919061432d565b60405180910390f35b3480156103e157600080fd5b506103ea610cff565b6040516103f7919061432d565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906136c5565b610d05565b005b34801561043557600080fd5b5061043e610d65565b005b34801561044c57600080fd5b50610467600480360381019061046291906137db565b610e0e565b604051610474919061432d565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613658565b610eb3565b6040516104b19190613f90565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906138a8565b610f7c565b005b6104eb611026565b005b3480156104f957600080fd5b50610514600480360381019061050f91906136c5565b611122565b005b34801561052257600080fd5b5061053d60048036038101906105389190613658565b611142565b60405161054a9190613f6e565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190613978565b6111f0565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613978565b611276565b6040516105b0919061432d565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061392f565b6112e7565b005b3480156105ee57600080fd5b506105f761137d565b6040516106049190613f90565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190613978565b611390565b6040516106419190613f07565b60405180910390f35b34801561065657600080fd5b5061065f611442565b60405161066c9190613fab565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613658565b6114d0565b6040516106a9919061432d565b60405180910390f35b3480156106be57600080fd5b506106c7611588565b005b3480156106d557600080fd5b506106f060048036038101906106eb9190613978565b611610565b005b3480156106fe57600080fd5b50610707611696565b6040516107149190613f07565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061381b565b6116c0565b005b34801561075257600080fd5b5061075b611875565b6040516107689190613fab565b60405180910390f35b34801561077d57600080fd5b50610786611907565b6040516107939190613f90565b60405180910390f35b6107b660048036038101906107b19190613978565b61191a565b005b3480156107c457600080fd5b506107df60048036038101906107da919061379b565b611cb3565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613718565b611cc9565b005b34801561081657600080fd5b50610831600480360381019061082c9190613978565b611d2b565b60405161083e9190613f07565b60405180910390f35b34801561085357600080fd5b5061085c611d6a565b604051610869919061432d565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613978565b611d70565b6040516108a69190613fab565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613978565b611e17565b005b3480156108e457600080fd5b506108ed611e9d565b6040516108fa919061432d565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613685565b611ea3565b6040516109379190613f90565b60405180910390f35b34801561094c57600080fd5b506109676004803603810190610962919061385b565b611f37565b005b34801561097557600080fd5b50610990600480360381019061098b9190613658565b611fd7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a04826120cf565b5b9050919050565b610a146121b1565b73ffffffffffffffffffffffffffffffffffffffff16610a32611696565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906141cd565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610ab49061462e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae09061462e565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b42826121b9565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b78906141ad565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc782611390565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f9061422d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c576121b1565b73ffffffffffffffffffffffffffffffffffffffff161480610c865750610c8581610c806121b1565b611ea3565b5b610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc906140ed565b60405180910390fd5b610ccf8383612225565b505050565b600c5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b600e5481565b610d16610d106121b1565b826122de565b610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c9061428d565b60405180910390fd5b610d608383836123bc565b505050565b610d6d6121b1565b73ffffffffffffffffffffffffffffffffffffffff16610d8b611696565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906141cd565b60405180910390fd5b6000601060016101000a81548160ff021916908315150217905550610e0c66b1a2bc2ec500006111f0565b565b6000610e19836114d0565b8210610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613fcd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060011515601060019054906101000a900460ff1615151415610f725760005b601180549050811015610f70578273ffffffffffffffffffffffffffffffffffffffff1660118281548110610f0c57610f0b6147c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f5d576001915050610f77565b8080610f6890614691565b915050610ed4565b505b600090505b919050565b610f846121b1565b73ffffffffffffffffffffffffffffffffffffffff16610fa2611696565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906141cd565b60405180910390fd5b80601060016101000a81548160ff021916908315150217905550611023673782dace9d9000006111f0565b50565b61102e6121b1565b73ffffffffffffffffffffffffffffffffffffffff1661104c611696565b73ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611099906141cd565b60405180910390fd5b60006110ac611696565b73ffffffffffffffffffffffffffffffffffffffff16476040516110cf90613ef2565b60006040518083038185875af1925050503d806000811461110c576040519150601f19603f3d011682016040523d82523d6000602084013e611111565b606091505b505090508061111f57600080fd5b50565b61113d83838360405180602001604052806000815250611cc9565b505050565b6060600061114f836114d0565b905060008167ffffffffffffffff81111561116d5761116c6147f6565b5b60405190808252806020026020018201604052801561119b5781602001602082028036833780820191505090505b50905060005b828110156111e5576111b38582610e0e565b8282815181106111c6576111c56147c7565b5b60200260200101818152505080806111dd90614691565b9150506111a1565b508092505050919050565b6111f86121b1565b73ffffffffffffffffffffffffffffffffffffffff16611216611696565b73ffffffffffffffffffffffffffffffffffffffff161461126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906141cd565b60405180910390fd5b80600c8190555050565b6000611280610cda565b82106112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906142ad565b60405180910390fd5b600882815481106112d5576112d46147c7565b5b90600052602060002001549050919050565b6112ef6121b1565b73ffffffffffffffffffffffffffffffffffffffff1661130d611696565b73ffffffffffffffffffffffffffffffffffffffff1614611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a906141cd565b60405180910390fd5b80600b9080519060200190611379929190613340565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114309061412d565b60405180910390fd5b80915050919050565b600b805461144f9061462e565b80601f016020809104026020016040519081016040528092919081815260200182805461147b9061462e565b80156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611541576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115389061410d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115906121b1565b73ffffffffffffffffffffffffffffffffffffffff166115ae611696565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906141cd565b60405180910390fd5b61160e6000612623565b565b6116186121b1565b73ffffffffffffffffffffffffffffffffffffffff16611636611696565b73ffffffffffffffffffffffffffffffffffffffff161461168c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611683906141cd565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116c86121b1565b73ffffffffffffffffffffffffffffffffffffffff166116e6611696565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611733906141cd565b60405180910390fd5b60008160ff1611611782576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117799061424d565b60405180910390fd5b600061178c610cda565b9050600d548260ff16826117a09190614456565b11156117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d89061414d565b60405180910390fd5b6000600190505b8260ff16811161186f57601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061184290614691565b919050555061185c8482846118579190614456565b6126e9565b808061186790614691565b9150506117e8565b50505050565b6060600180546118849061462e565b80601f01602080910402602001604051908101604052809291908181526020018280546118b09061462e565b80156118fd5780601f106118d2576101008083540402835291602001916118fd565b820191906000526020600020905b8154815290600101906020018083116118e057829003601f168201915b5050505050905090565b601060019054906101000a900460ff1681565b601060009054906101000a900460ff161561196a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611961906141ed565b60405180910390fd5b6000611974610cda565b9050600082116119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b09061430d565b60405180910390fd5b600e548211156119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061416d565b60405180910390fd5b600d548282611a0d9190614456565b1115611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a459061414d565b60405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548382611aa19190614456565b1115611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad99061406d565b60405180910390fd5b611aea611696565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c225760011515601060019054906101000a900460ff1615151415611bd157611b4133610eb3565b611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b77906142ed565b60405180910390fd5b6103e88383611b8f9190614456565b1115611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc7906142cd565b60405180910390fd5b5b82600c54611bdf91906144dd565b341015611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c189061426d565b60405180910390fd5b5b6000600190505b838111611cad57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c8090614691565b9190505550611c9a338285611c959190614456565b6126e9565b8080611ca590614691565b915050611c29565b50505050565b611cc5611cbe6121b1565b8383612707565b5050565b611cda611cd46121b1565b836122de565b611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d109061428d565b60405180910390fd5b611d2584848484612874565b50505050565b60118181548110611d3b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6060611d7b826121b9565b611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db19061420d565b60405180910390fd5b6000611dc46128d0565b90506000815111611de45760405180602001604052806000815250611e0f565b80611dee84612962565b604051602001611dff929190613ece565b6040516020818303038152906040525b915050919050565b611e1f6121b1565b73ffffffffffffffffffffffffffffffffffffffff16611e3d611696565b73ffffffffffffffffffffffffffffffffffffffff1614611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a906141cd565b60405180910390fd5b80600f8190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f3f6121b1565b73ffffffffffffffffffffffffffffffffffffffff16611f5d611696565b73ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa906141cd565b60405180910390fd5b60116000611fc191906133c6565b818160119190611fd29291906133e7565b505050565b611fdf6121b1565b73ffffffffffffffffffffffffffffffffffffffff16611ffd611696565b73ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba9061400d565b60405180910390fd5b6120cc81612623565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121aa57506121a982612ac3565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229883611390565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e9826121b9565b612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906140cd565b60405180910390fd5b600061233383611390565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061237557506123748185611ea3565b5b806123b357508373ffffffffffffffffffffffffffffffffffffffff1661239b84610b37565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123dc82611390565b73ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124299061402d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124999061408d565b60405180910390fd5b6124ad838383612b2d565b6124b8600082612225565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125089190614537565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255f9190614456565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261e838383612c41565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612703828260405180602001604052806000815250612c46565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d906140ad565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128679190613f90565b60405180910390a3505050565b61287f8484846123bc565b61288b84848484612ca1565b6128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190613fed565b60405180910390fd5b50505050565b6060600b80546128df9061462e565b80601f016020809104026020016040519081016040528092919081815260200182805461290b9061462e565b80156129585780601f1061292d57610100808354040283529160200191612958565b820191906000526020600020905b81548152906001019060200180831161293b57829003601f168201915b5050505050905090565b606060008214156129aa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612abe565b600082905060005b600082146129dc5780806129c590614691565b915050600a826129d591906144ac565b91506129b2565b60008167ffffffffffffffff8111156129f8576129f76147f6565b5b6040519080825280601f01601f191660200182016040528015612a2a5781602001600182028036833780820191505090505b5090505b60008514612ab757600182612a439190614537565b9150600a85612a5291906146da565b6030612a5e9190614456565b60f81b818381518110612a7457612a736147c7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ab091906144ac565b9450612a2e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b38838383612e38565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b7b57612b7681612e3d565b612bba565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bb957612bb88382612e86565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfd57612bf881612ff3565b612c3c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c3b57612c3a82826130c4565b5b5b505050565b505050565b612c508383613143565b612c5d6000848484612ca1565b612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9390613fed565b60405180910390fd5b505050565b6000612cc28473ffffffffffffffffffffffffffffffffffffffff1661331d565b15612e2b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ceb6121b1565b8786866040518563ffffffff1660e01b8152600401612d0d9493929190613f22565b602060405180830381600087803b158015612d2757600080fd5b505af1925050508015612d5857506040513d601f19601f82011682018060405250810190612d559190613902565b60015b612ddb573d8060008114612d88576040519150601f19603f3d011682016040523d82523d6000602084013e612d8d565b606091505b50600081511415612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90613fed565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e30565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e93846114d0565b612e9d9190614537565b9050600060076000848152602001908152602001600020549050818114612f82576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130079190614537565b9050600060096000848152602001908152602001600020549050600060088381548110613037576130366147c7565b5b906000526020600020015490508060088381548110613059576130586147c7565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130a8576130a7614798565b5b6001900381819060005260206000200160009055905550505050565b60006130cf836114d0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131aa9061418d565b60405180910390fd5b6131bc816121b9565b156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f39061404d565b60405180910390fd5b61320860008383612b2d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132589190614456565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461331960008383612c41565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461334c9061462e565b90600052602060002090601f01602090048101928261336e57600085556133b5565b82601f1061338757805160ff19168380011785556133b5565b828001600101855582156133b5579182015b828111156133b4578251825591602001919060010190613399565b5b5090506133c29190613487565b5090565b50805460008255906000526020600020908101906133e49190613487565b50565b828054828255906000526020600020908101928215613476579160200282015b8281111561347557823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613407565b5b5090506134839190613487565b5090565b5b808211156134a0576000816000905550600101613488565b5090565b60006134b76134b28461436d565b614348565b9050828152602081018484840111156134d3576134d2614834565b5b6134de8482856145ec565b509392505050565b60006134f96134f48461439e565b614348565b90508281526020810184848401111561351557613514614834565b5b6135208482856145ec565b509392505050565b60008135905061353781614f0a565b92915050565b60008083601f8401126135535761355261482a565b5b8235905067ffffffffffffffff8111156135705761356f614825565b5b60208301915083602082028301111561358c5761358b61482f565b5b9250929050565b6000813590506135a281614f21565b92915050565b6000813590506135b781614f38565b92915050565b6000815190506135cc81614f38565b92915050565b600082601f8301126135e7576135e661482a565b5b81356135f78482602086016134a4565b91505092915050565b600082601f8301126136155761361461482a565b5b81356136258482602086016134e6565b91505092915050565b60008135905061363d81614f4f565b92915050565b60008135905061365281614f66565b92915050565b60006020828403121561366e5761366d61483e565b5b600061367c84828501613528565b91505092915050565b6000806040838503121561369c5761369b61483e565b5b60006136aa85828601613528565b92505060206136bb85828601613528565b9150509250929050565b6000806000606084860312156136de576136dd61483e565b5b60006136ec86828701613528565b93505060206136fd86828701613528565b925050604061370e8682870161362e565b9150509250925092565b600080600080608085870312156137325761373161483e565b5b600061374087828801613528565b945050602061375187828801613528565b93505060406137628782880161362e565b925050606085013567ffffffffffffffff81111561378357613782614839565b5b61378f878288016135d2565b91505092959194509250565b600080604083850312156137b2576137b161483e565b5b60006137c085828601613528565b92505060206137d185828601613593565b9150509250929050565b600080604083850312156137f2576137f161483e565b5b600061380085828601613528565b92505060206138118582860161362e565b9150509250929050565b600080604083850312156138325761383161483e565b5b600061384085828601613528565b925050602061385185828601613643565b9150509250929050565b600080602083850312156138725761387161483e565b5b600083013567ffffffffffffffff8111156138905761388f614839565b5b61389c8582860161353d565b92509250509250929050565b6000602082840312156138be576138bd61483e565b5b60006138cc84828501613593565b91505092915050565b6000602082840312156138eb576138ea61483e565b5b60006138f9848285016135a8565b91505092915050565b6000602082840312156139185761391761483e565b5b6000613926848285016135bd565b91505092915050565b6000602082840312156139455761394461483e565b5b600082013567ffffffffffffffff81111561396357613962614839565b5b61396f84828501613600565b91505092915050565b60006020828403121561398e5761398d61483e565b5b600061399c8482850161362e565b91505092915050565b60006139b18383613eb0565b60208301905092915050565b6139c68161456b565b82525050565b60006139d7826143df565b6139e1818561440d565b93506139ec836143cf565b8060005b83811015613a1d578151613a0488826139a5565b9750613a0f83614400565b9250506001810190506139f0565b5085935050505092915050565b613a338161457d565b82525050565b6000613a44826143ea565b613a4e818561441e565b9350613a5e8185602086016145fb565b613a6781614843565b840191505092915050565b6000613a7d826143f5565b613a87818561443a565b9350613a978185602086016145fb565b613aa081614843565b840191505092915050565b6000613ab6826143f5565b613ac0818561444b565b9350613ad08185602086016145fb565b80840191505092915050565b6000613ae9602b8361443a565b9150613af482614854565b604082019050919050565b6000613b0c60328361443a565b9150613b17826148a3565b604082019050919050565b6000613b2f60268361443a565b9150613b3a826148f2565b604082019050919050565b6000613b5260258361443a565b9150613b5d82614941565b604082019050919050565b6000613b75601c8361443a565b9150613b8082614990565b602082019050919050565b6000613b98601c8361443a565b9150613ba3826149b9565b602082019050919050565b6000613bbb60248361443a565b9150613bc6826149e2565b604082019050919050565b6000613bde60198361443a565b9150613be982614a31565b602082019050919050565b6000613c01602c8361443a565b9150613c0c82614a5a565b604082019050919050565b6000613c2460388361443a565b9150613c2f82614aa9565b604082019050919050565b6000613c47602a8361443a565b9150613c5282614af8565b604082019050919050565b6000613c6a60298361443a565b9150613c7582614b47565b604082019050919050565b6000613c8d60168361443a565b9150613c9882614b96565b602082019050919050565b6000613cb060248361443a565b9150613cbb82614bbf565b604082019050919050565b6000613cd360208361443a565b9150613cde82614c0e565b602082019050919050565b6000613cf6602c8361443a565b9150613d0182614c37565b604082019050919050565b6000613d1960208361443a565b9150613d2482614c86565b602082019050919050565b6000613d3c60168361443a565b9150613d4782614caf565b602082019050919050565b6000613d5f602f8361443a565b9150613d6a82614cd8565b604082019050919050565b6000613d8260218361443a565b9150613d8d82614d27565b604082019050919050565b6000613da560138361443a565b9150613db082614d76565b602082019050919050565b6000613dc860008361442f565b9150613dd382614d9f565b600082019050919050565b6000613deb60128361443a565b9150613df682614da2565b602082019050919050565b6000613e0e60318361443a565b9150613e1982614dcb565b604082019050919050565b6000613e31602c8361443a565b9150613e3c82614e1a565b604082019050919050565b6000613e5460258361443a565b9150613e5f82614e69565b604082019050919050565b6000613e7760178361443a565b9150613e8282614eb8565b602082019050919050565b6000613e9a601b8361443a565b9150613ea582614ee1565b602082019050919050565b613eb9816145d5565b82525050565b613ec8816145d5565b82525050565b6000613eda8285613aab565b9150613ee68284613aab565b91508190509392505050565b6000613efd82613dbb565b9150819050919050565b6000602082019050613f1c60008301846139bd565b92915050565b6000608082019050613f3760008301876139bd565b613f4460208301866139bd565b613f516040830185613ebf565b8181036060830152613f638184613a39565b905095945050505050565b60006020820190508181036000830152613f8881846139cc565b905092915050565b6000602082019050613fa56000830184613a2a565b92915050565b60006020820190508181036000830152613fc58184613a72565b905092915050565b60006020820190508181036000830152613fe681613adc565b9050919050565b6000602082019050818103600083015261400681613aff565b9050919050565b6000602082019050818103600083015261402681613b22565b9050919050565b6000602082019050818103600083015261404681613b45565b9050919050565b6000602082019050818103600083015261406681613b68565b9050919050565b6000602082019050818103600083015261408681613b8b565b9050919050565b600060208201905081810360008301526140a681613bae565b9050919050565b600060208201905081810360008301526140c681613bd1565b9050919050565b600060208201905081810360008301526140e681613bf4565b9050919050565b6000602082019050818103600083015261410681613c17565b9050919050565b6000602082019050818103600083015261412681613c3a565b9050919050565b6000602082019050818103600083015261414681613c5d565b9050919050565b6000602082019050818103600083015261416681613c80565b9050919050565b6000602082019050818103600083015261418681613ca3565b9050919050565b600060208201905081810360008301526141a681613cc6565b9050919050565b600060208201905081810360008301526141c681613ce9565b9050919050565b600060208201905081810360008301526141e681613d0c565b9050919050565b6000602082019050818103600083015261420681613d2f565b9050919050565b6000602082019050818103600083015261422681613d52565b9050919050565b6000602082019050818103600083015261424681613d75565b9050919050565b6000602082019050818103600083015261426681613d98565b9050919050565b6000602082019050818103600083015261428681613dde565b9050919050565b600060208201905081810360008301526142a681613e01565b9050919050565b600060208201905081810360008301526142c681613e24565b9050919050565b600060208201905081810360008301526142e681613e47565b9050919050565b6000602082019050818103600083015261430681613e6a565b9050919050565b6000602082019050818103600083015261432681613e8d565b9050919050565b60006020820190506143426000830184613ebf565b92915050565b6000614352614363565b905061435e8282614660565b919050565b6000604051905090565b600067ffffffffffffffff821115614388576143876147f6565b5b61439182614843565b9050602081019050919050565b600067ffffffffffffffff8211156143b9576143b86147f6565b5b6143c282614843565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614461826145d5565b915061446c836145d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a1576144a061470b565b5b828201905092915050565b60006144b7826145d5565b91506144c2836145d5565b9250826144d2576144d161473a565b5b828204905092915050565b60006144e8826145d5565b91506144f3836145d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452c5761452b61470b565b5b828202905092915050565b6000614542826145d5565b915061454d836145d5565b9250828210156145605761455f61470b565b5b828203905092915050565b6000614576826145b5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156146195780820151818401526020810190506145fe565b83811115614628576000848401525b50505050565b6000600282049050600182168061464657607f821691505b6020821081141561465a57614659614769565b5b50919050565b61466982614843565b810181811067ffffffffffffffff82111715614688576146876147f6565b5b80604052505050565b600061469c826145d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146cf576146ce61470b565b5b600182019050919050565b60006146e5826145d5565b91506146f0836145d5565b925082614700576146ff61473a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f20616d6f756e742073706563696669656400000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f46697273742077686974656c697374206c696d6974206578636565646564202860008201527f3130303029000000000000000000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f138161456b565b8114614f1e57600080fd5b50565b614f2a8161457d565b8114614f3557600080fd5b50565b614f4181614589565b8114614f4c57600080fd5b50565b614f58816145d5565b8114614f6357600080fd5b50565b614f6f816145df565b8114614f7a57600080fd5b5056fea2646970667358221220bc2c129ca12ba708ec52539ee5f62770779810068d67e3d10b9db265b5a8e27c64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65636e4b637748536a583156474455677845654b59577a6a666b6963764d6536446a764636586641446d42772f00000000000000000000